Implementation: Composing a Pipeline
from Domain Modeling Made Functional
Modeling Workflows as Pipelines の パイプライン を F# で実装する
実装には、以下の 2 つの段階がある
1. パイプラインの各ステップを、独立した関数として実装する
ステートレス で 副作用 がないようにする
これにより、独立してテスト・理解することができるように
2. 1. の関数を関数合成する
しかし、以下の 2 つの理由から、簡単に合成できない
1. 依存関係: パイプラインの一部ではないが、実装には必要な追加のパラメータがある
この章で触れる
FP で 依存性の注入 と同等のことを実現する
2. エフェクト: 出力に Result のようなエフェクトを用いると、中身のデータを入力とする関数と合成できない
次の章で触れる
Implementation: Working with Errors
実際にコードを書く時も、本書の流れと同様に、Result や Async などのエフェクトを気にせず、一旦すべてのステップを実装すると良い
これにより、合成 の基本に集中できる
フロー
前準備
各ステップを実装する前に、単純型を実装する
SimpleTypes.fs など、実装とは別ファイルに記述する
各ステップの実装
Tips: 関数の型から実装を導く
最初のステップの実装
残りのステップの実装
ステップの合成
パイプラインのステップを 1 つに合成する
DMMF: 依存関係の注入
テスト
依存関係のテスト
ファイルは ワークフロー 単位で作成する
code:ワークフロー名.fs
module ワークフロー名 =
// 1. 設計 (型定義)
// 2. 各ステップの実装
// 3. メインとなるワークフローの関数
#DDD #読書メモ